Mastering Linux Top

1. 概念

Linux下的top命令用于显示排序后的系统进程信息和系统的关键指标信息,默认按照pid进行排序,该命令一般用于分析服务端的实时性能状况

使用top命令后,整个界面会将信息分为两个板块,分别是前5行的系统基础信息,维度包含了CPU,运行内存等,然而页面的下部分主要由一个表格组成,表格中展示了各个进程的状态信息

image-20230915235128602

除了以上的基本系统信息之外,top还支持显示系统的负载平均值,通常我们通过负载平均值就能够得到系统的繁忙程度,另外还支持自定义展示系统信息,如筛选、排序以及一些常用的进程操作命令

2. 基础信息

如上所述,输入top可以得到系统前5行所展示的基本信息:

image-20230916001020687

  • 第 1 行:展示了当前系统时间,其中up 964 days, 2:20表示系统已经运行了964天2小时20分钟,1 user表示当前系统1个用户登录,最后的load average参数则表示了系统的负载情况,三个数值分别表示了系统最近1, 5, 15分钟的系统负载,单核CPU的情况下,0.00表示没有任何负载,1.00则表示刚好满负载,超过1表示超负荷运行中,0.7左右的负载是一个比较理想的值,多核情况下,理想负荷值的计算方式则是CPUs * 0.7
  • 第 2 行:展示了当前系统任务总数,其中102 total表示当前系统一共运行了102个进程,其中1 running表示当前存在1个进程正在运行,100 sleeping则表示有100个进程正在睡眠,0 stopped则表示没有停止的进程数,1 zombie则表示存在1个僵尸进程

僵尸进程:僵尸进程是系统中一种特殊的进程状态,意味着该进程不再工作,但是由于其父进程未正确地将其终止,导致存在部分占用的文件描述符,因此该进程依旧存在于系统的进程表中,直到其父进程确认其终止状态,通常发生在父进程没有正确地等待其子进程的终止状态,或者在父进程在子进程之前退出而未正确处理子进程的终止

  • 第 3 行:从各个维度描述了CPU的占用情况

    • 0.7 us: 该指标表示用户态占用CPU运行时间的百分比为0.7%

    • 1.0 sy: 该指标表示内核态占用CPU运行时间的百分比为1.0%

    • 0.0 ni: 用户空间内改变过优先级的进程占用CPU百分比为0.0%

    • 98.3 id: 该指标表示CPU处于空闲状态时间的百分比为98.3%

    • 0.0 wa: 该指标表示CPU等待I/O操作完成的百分比,如果该指标过高,则表示磁盘 或者 其他I/O子系统存在瓶颈

    • 0.0 hi: 硬中断「Hardware Interrupts」占CPU的百分比为0.0%

    • 0.0 si: 软中断「Software Interrupts」占CPU的百分比为0.0%

    • 0.0 st: 该指标表示虚拟机VM中的虚拟CPU从物理CPU中偷取的时间占总CPU时间的百分比,如果开启了虚拟化环境,该参数才有可能会出现,表示虚拟机需要与其他虚拟机竞争物理CPU资源的时间

  • 第 4 行:从各个维度描述了系统运行内存的情况

    • 1798924 total: 表示可使用的物理内存(RAM)总量为1798924 KB
    • 76984 free: 表示可使用的空闲物理内存为76984 KB
    • 971064 used: 表示已使用的物理内存为971064 KB
    • 750876 buff/cache: 用于磁盘缓存和文件系统缓存的内存总量,这部分内存通常被用于缓存文件系统数据,以便加快文件读取和写入操作,用于提升系统的性能
  • 第 5 行:描述了与交换空间相关的信息

    • 1048572 total: 表示交换空间的总量为1048572 KB
    • 973096 free: 表示当前未被使用的交换空间总量为973096 KB,系统可以将数据写入其中以便省出物理内存
    • 75476 used: 表示当前正在使用的交换空间总量为75476 KB,表示已经写入交换分区的数据量

3. 进程信息

image-20230916182520907

top命令中的表格展示了系统中的进程信息,进程信息默认按照PID做升序排序,其中进程表格中各列的含义如下所示:

  • PID:是进程的唯一标识符,即进程号「Process ID」,每个进程都有独一无二的PID
  • USER:表示运行该进程的用户
  • PR:是进程的优先级或调度的优先级「Priority」,较低的数字表示较高的优先级,而较高的数字则表示较低的优先级
  • NI:进程的nice值,如果该值越低,则表示该进程的优先级越高,该值越高,则表示该进程的优先级越低(数字越小,进程越重要)
  • VIRT:进程所使用的虚拟内存总量,单位是KB,虚拟内存包含了物理内存 + 交换空间
  • RES:全称是 Resident Set Size,表示当前进程占用物理内存的总量,单位是KB
  • SHR:指的是进程占用工项内存的总量,单位是KB
  • S:该列表示的是各个进程的状态,状态标识符如下所示
    • R:表示进程正在运行中 (Running),正在使用CPU资源执行任务
    • S:表示进程处于休眠状态 (Sleeping), 即增在等待事件的发生,如等待I/O操作完成
    • D: 表示进程正在处于不可中断休眠状态 (Uninterruptible Sleep),表示进程正在执行不可中断的休眠,通常在等待系统关键资源时出现
    • Z: 僵尸进程 (Zombie),表示进程已经终止,但其父进程尚未确认其终止状态,因此该进程会保留在进程表中直至父进程被回收
    • T: 表示进程已经停止 (Stopped)
    • t: 表示进程已经停止 (Tracing Stop),但是这种停止一般是由于调试器追中而暂停的进程
    • W: 表示进程已经终止,但其退出状态尚未被回收,通常是由于父进程没有正确退出状态
    • X: 表示进程已经终止,与W标识符的含义一致
  • %CPU:进程CPU的使用率,表示进程一段时间内使用CPU的百分比
  • %Mem:进程内存的使用率,表示进程一段时间内使用内存的百分比
  • **TIME+ **:进程累计使用CPU的时间
  • COMMAND:进程的命令名称,表示文件是通过哪个可执行文件进行的

4. 其他

top命令模式下,可以通过按键指令触发多种类型的命令,如下所示:

  • Shift + V: 可以展示出进程层级调用关系
  • M: 可以切换内存和交换空间的不同展示样式
  • Shift + P: 可以将进程按照CPU的使用率进行降序排序
  • Shift + M: 可以将进程按照物理内存的使用率进行降序排序
  • 1: 可以显示出各个CPU核心的负载情况
  • Shift + W: 将当前top命令窗口的配置写入至~/.toprc中,以便下次使用top命令时依旧采用相同的配置
  • ?: 显示top命令的帮助文档
  • Shift + H: 可以切换至线程视图,方便跟踪具体进程内的线程情况
  • u: 根据用户名过滤进程,输入后,会要求输入要查看的用户名,然后按Enter键确认
  • Space: 刷新当前top列表
  • k: 输入进程号后杀死该进程
  • r: 重新调整进程的优先级,也就是进程的nice值(数值越小,表示进程越重要)
  • c: 显示进程所执行的完整启动命令
  • f: 对进程表显示的列 或 排序方式进行调整
  • d: 对进程表的刷新时间进行调整